﻿using Ortodoctor.modelo;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Ortodoctor.Client
{
    public partial class teste : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if ((Session["id_cliente_logado"] == null) || (Session["nome_cliente_logado"] == null))
            {
                Session["id_cliente_logado"] = 11;
                Session["nome_cliente_logado"] = "Alexandre A. Giron";
            }

            if (Session["USUARIO"] == null)
            {
                debito.Style.Add("display", "none");
            }

            debito.Style.Add("position", "absolute");
            debito.Style.Add("right", "-30px");
            debito.Style.Add("padding", "20px");

            DataTable dt = new DataTable();
            modeloProcedimentoCliente proclient = new modeloProcedimentoCliente();
            dt = proclient.getProcCliente(Convert.ToInt32(Session["id_cliente_logado"]));

            Session["debito"] = new modeloCredito().getDebito(Convert.ToInt32(Session["id_cliente_logado"]));

            if (dt.Rows.Count == 0)
            {
                nome_cliente.InnerText = "Olá " + Session["nome_cliente_logado"].ToString();
                Tempo_tratamento.InnerText = "Você não está fazendo nenhum tratamento";
                Parcelas_Pagas.InnerText = "Parcelas pagas: 0";
                Parcelas_Restantes.InnerText = "Parcelas restantes: 0";

                setIndicados(Convert.ToInt32(Session["id_cliente_logado"]));
                indicado.Value = "false";
            }
            else
            {
                indicado.Value = "true";
                modeloParcelas parc = new modeloParcelas();
                int parcelas_pagas = Convert.ToInt32(parc.getParcelasPagas(Convert.ToInt32(dt.Rows[0]["id_procedimento_cliente"])));
                dt = proclient.getProcCliente(Convert.ToInt32(Session["id_cliente_logado"]));
                nome_cliente.InnerText = "Olá " + Session["nome_cliente_logado"].ToString();
                Tempo_tratamento.InnerText = "Tempo de tratamento: " + dt.Rows[0]["tempo_tratamento"].ToString();
                Parcelas_Pagas.InnerText = "Parcelas pagas: " + parcelas_pagas;
                Parcelas_Restantes.InnerText = "Parcelas restantes: " + (Convert.ToInt32(dt.Rows[0]["tempo_tratamento"]) - parcelas_pagas).ToString();

                setTratamento(Convert.ToInt32(dt.Rows[0]["id_procedimento_cliente"]));
                setIndicados(Convert.ToInt32(Session["id_cliente_logado"]));
            }
        }

        private void setIndicados(int id_indicou)
        {
            DataTable dt = new modeloIndicado().getParcelasIndicados(id_indicou);
            DataView view = new DataView(dt);
            DataTable distinctValues = view.ToTable(true, "id_cliente", "data_vencimento");
            Numero_indicados.InnerHtml = "Número de indicados: " + distinctValues.Rows.Count;

            string div = "<div class='indicados'><table>";
            int value_Total = distinctValues.Rows.Count;
            for (int i = 0; i < value_Total; ++i)
            {
                Random rand = new Random();
                int index = rand.Next(distinctValues.Rows.Count);

                div += "<tr class='amigo'>";
                DateTime data = new DateTime();
                if (indicado.Value == "true")
                    data = new modeloIndicado().getDataIndicador(id_indicou);
                else
                    data = new modeloIndicado().getDataIndicadorWithNoTratement(id_indicou);

                int inicial = Convert.ToInt32(Math.Floor(Convert.ToDateTime(distinctValues.Rows[index]["data_vencimento"]).Subtract(data).TotalDays / 30));

                for (int j = 1; j <= inicial; ++j)
                    div += "<td></td>";

                if (inicial > 0)
                    inicial--;

                dt.DefaultView.RowFilter = "[id_cliente]=" + distinctValues.Rows[index]["id_cliente"].ToString();
                distinctValues.Rows.RemoveAt(index);

                DataTable dtemp = dt.DefaultView.ToTable();

                for (int j = inicial + 1; j <= dtemp.Rows.Count + inicial; ++j)
                {
                    if (dtemp.Rows[j - inicial - 1]["status"].ToString().Contains("PAGO"))
                        div += "<td><div class='parcelas_ball pago' index='" + (j) + "'><p class='tratamento'>" + (j + 1) + "</p></div></td>";
                    else
                        div += "<td><div class='parcelas_ball' index='" + (j) + "'><p class='tratamento'>" + (j + 1) + "</p></div></td>";
                }
            }
            div += "</table></div>";
            corpo_premio.InnerHtml += div;
        }

        private void setTratamento(int proc)
        {
            modeloParcelas parc = new modeloParcelas();
            DataTable dt = parc.getParcelasProcedimento(proc);
            string innerhtml = "<div><table><tr  class='amigo'>";
            for (int j = 0; j < dt.Rows.Count; ++j)
            {
                if (dt.Rows[j]["status"].ToString().Contains("PAGO"))
                    innerhtml += "<td><div class='parcelas_ball pago' index='" + j + "'><p class='tratamento'>" + (j + 1) + "</p></div></td>";
                else
                    innerhtml += "<td><div class='parcelas_ball' index='" + j + "'><p class='tratamento'>" + (j + 1) + "</p></div></td>";
            }
            innerhtml += "</tr></table></div>";
            corpo_premio.InnerHtml = innerhtml;
        }

        [WebMethod]
        public static string enviaNumero(int numero)
        {
            string saldo = (numero - Convert.ToInt32(HttpContext.Current.Session["debito"])).ToString();
            HttpContext.Current.Session["VALOR_CREDITO"] = saldo;
            string str =  new modeloCredito().getDate(Convert.ToInt32(HttpContext.Current.Session["id_cliente_logado"]));
            if (string.IsNullOrEmpty(str))
                new modeloCredito().insert(numero, Convert.ToInt32(HttpContext.Current.Session["id_cliente_logado"]));
            else
                new modeloCredito().credita(numero, Convert.ToInt32(HttpContext.Current.Session["id_cliente_logado"]));

            return saldo;
        }

        [WebMethod]
        public static string debita(int debito)
        {
            int credito = new modeloCredito().getCredito(Convert.ToInt32(HttpContext.Current.Session["id_cliente_logado"]));
            if (credito < 300)
                return "erro|Créditos insuficientes para a troca, são necessários ao menos 300 créditos";
            else if(credito < debito)
                return "erro|Créditos insuficientes para a troca";
            else
            {
                new modeloCredito().debita(debito, Convert.ToInt32(HttpContext.Current.Session["id_cliente_logado"]));
                return "ok|Parabéns, quantia de " + debito + " créditos debitados com sucesso!";
            }
        }
    }
}